/**
 * @file LogManager.h
 * @author iam002
 * @brief 日志类
 * @version 0.1
 * 
 * @copyright Copyright (c) 2023
 * 
 */

#ifndef __LOGMANAGER_H__
#define __LOGMANAGER_H__

/** 
 * NOTE: 定义 ELPP_NO_DEFAULT_LOG_FILE 宏来关闭easylogging++
 * 自动生成 myeasylog.log, 需要放在 #include "easylogging++.h"
 * 之前.
 */
#define ELPP_NO_DEFAULT_LOG_FILE
#include <easylogging++.h>
#include <string>
#include <iostream>
#include <cstdio>

/* 是否启用日志宏, 关闭后日志宏无效 */
extern bool _IS_LOG_ON;
/* 输出日志路径是否合法 */
extern bool _IS_LOG_PATH_VALID;
/* 启用或关闭日志宏 */
#define MSG_LOG_ENABLE  do { if (_IS_LOG_PATH_VALID) { _IS_LOG_ON = true; } \
							 else { _IS_LOG_ON = false; } } while(0)
#define MSG_LOG_DISABLE do { _IS_LOG_ON = false; } while(0)

/* easylogging日志对象 */
extern el::Logger* _LOG_MANAGER;
/* 日志接口宏封装 */
/* NOTE: MSG_FATAL会终止程序 */
# define $ ,
#ifdef LOGMANAGER_TURN_OFF
#define MSG_INFO(STR)  do {  }while(0)
#define MSG_DEBUG(STR) do {  }while(0)
#define MSG_WARN(STR)  do {  }while(0)
#define MSG_ERROR(STR) do {  }while(0)
#define MSG_FATAL(STR) do { exit(1); }while(0)
//#define MSG_ERROR(STR) do { fprintf(stderr, STR); fprintf(stderr, "\n"); }while(0)
//#define MSG_FATAL(STR) do { fprintf(stderr, STR); fprintf(stderr, "\n"); exit(1); }while(0)
#else
#define MSG_INFO(STR)  do { if(_IS_LOG_ON) { _LOG_MANAGER->info(STR) ; } }while(0)
#define MSG_DEBUG(STR) do { if(_IS_LOG_ON) { _LOG_MANAGER->debug(STR); } }while(0)
#define MSG_WARN(STR)  do { if(_IS_LOG_ON) { _LOG_MANAGER->warn(STR) ; } }while(0)
#define MSG_ERROR(STR) do { if(_IS_LOG_ON) { _LOG_MANAGER->error(STR); } }while(0)
#define MSG_FATAL(STR) do { if(_IS_LOG_ON) { _LOG_MANAGER->fatal(STR); } }while(0)
#endif

/**
 * 设置日志管理类.
 * 
 * \param bToStd 是否将日志输出到标准输出
 * \param logPath 日志路径, 若为null不会由日志食输出
 * \return void
 *
 * 1. 用户需要保证输入路径的合法性;
 * 2. 日志输出不会覆盖原文件内容; 
 */
void SetLogManager(bool bToStd = true, bool is_cover = true, const char* logPath = nullptr);

#endif


